Modern processors include various structures such as computing circuitry, logic, memory structures and so forth. Data that is processed by the structures is communicated at very high speeds, and is transmitted along very intricate datapaths formed using different types of semiconductor circuits. Given the very small size of such structures, information bits of such data can be subject to random errors such as single bit errors that may occur for a variety of reasons. Accordingly, many processors include some type of error detection circuitry, and it has been proposed to include at least some amounts of error correction circuitry for certain structures of a processor.
One challenging problem regarding usage of codes for error detection/correction in the processor (including memory and datapath) is that different types of codes are used in different units of the processor. For example, error correction codes (ECC) such as a Hamming code or similar code can be used in the memory units, and error detection codes such as residual arithmetic codes can be used in a datapath unit, and various parity codes are used in many control logics. The problem with using different types of codes in different units of the system is that the data need to be encoded and decoded multiple times when flowing through the system, increasing power consumption, complexity and real estate costs. Furthermore the circuits at the boundary of two ECC domains will not have any coverage.
Therefore moving data from one part of the system to another part requires the data going through the unprotected regions. Moving data in the system also requires extra encoding and decoding. This extra decoding and encoding process at the boundary of each sub-block increases the latency and the power consumption, and also reduces the coverage (since the encoding and decoding process can introduce errors to the data as well). As a result, this patchwork solution increases the design complexity of the system, and causes a processor or system-on-a-chip (SoC) design to be more challenging.